<?php

require_once '../DTO/ItemsAdicionalesDTO.php';

/**
 * Description of ComprobanteServicios
 *
 * @author  Mariano Renkine
 * @author  Fernando Arau
 */
class ComprobanteServicios extends Servicios
{

  function agregarComprobante(ComprobanteDTO $comprobanteDTO)
  {
    $repoComprobante = new RepoComprobante();
    return $repoComprobante->agregar($this->deDTO($comprobanteDTO));
  }

  function agregar(Comprobante $comprobante)
  {
    $repoComprobante = new RepoComprobante();
    return $repoComprobante->agregar($comprobante);
  }

  function buscar($id)
  {
    $repoComprobante = new RepoComprobante();
    return $this->aDTO($repoComprobante->buscar($id));
  }

  function buscarComprobantesPendientes()
  {
    $repoComprobante = new RepoComprobante();
    $comprobantes = $repoComprobante->buscarComprobantesPendientes();
    $comprobantesDTO = array();
    $resServicios = new ReservaServicios();
    foreach ($comprobantes as $comprobante)
    {
      /** @var ComprobanteDTO $comprobanteDTO   */
      $comprobanteDTO = $this->aDTO($comprobante);
      /* @var $reserva ReservaDTO */
      $reserva = $resServicios->buscarPorComprobante($comprobante);
      if ($reserva)
        $comprobanteDTO->setNombreReserva($reserva->getNombreCompCliente());
      $comprobantesDTO[] = $comprobanteDTO;
    }

    return $comprobantesDTO;
  }

  function buscarPorFactura($id)
  {
    $repoComprobante = new RepoComprobante();
    return $this->aDTO($repoComprobante->buscarPorFactura($id));
  }

  function modificar(ComprobanteDTO $comprobanteDTO)
  {
    $repoComprobante = new RepoComprobante();
    $repoComprobante->modificar($this->deDTO($comprobanteDTO));
  }

  function cerrarComprobante(ComprobanteDTO $comprobanteDTO)
  {
    $repoComprobante = new RepoComprobante();
    $repoComprobante->cerrarComprobante($this->deDTO($comprobanteDTO));
  }

  function aDTO(Comprobante $comprobante)
  {
    $reservaServicios = new ReservaServicios();
    $reservaDTO = new ReservaDTO();
    $clienteDTO = new ClienteEventualDTO();
    $comprobanteDTO = new ComprobanteDTO();
    $comprobanteDTO->setId($comprobante->getId());
    $comprobanteDTO->setDescuento($comprobante->getDescuento());
    $comprobanteDTO->setFechaHora($comprobante->getFechaHora());
    $comprobanteDTO->setNroComprobante($comprobante->getNroComprobante());
    $comprobanteDTO->setDetalleComprobante($comprobante->getDetalleComprobante());
    $comprobanteDTO->setTotalComprobante($comprobante->getTotalComprobante());
    $reservaDTO = $reservaServicios->buscarPorComprobante($comprobante);
    if ($reservaDTO)
    {
      if ($reservaDTO->getCliente() != null)
      {
        $clienteDTO = $reservaDTO->getCliente();
        $comprobanteDTO->setDomicilioReserva($clienteDTO->getDomicilio());
      }
      $comprobanteDTO->setNombreReserva($reservaDTO->getNombreCompCliente());
      $comprobanteDTO->setItems($comprobante->getItems());
      $comprobanteDTO->setNroFactura($comprobante->getFactura());
      $comprobanteDTO->setNroHabitacionReserva($reservaDTO->getHabitacion());
      $comprobanteDTO->setTratamiento($reservaDTO->getTratamiento());
    }
    return $comprobanteDTO;
  }

  function cerrarCargoHabitacion($idComprobante, $idCargoHabitacion)
  {
    $repoComprobante = new RepoComprobante();    
    $resultado = $repoComprobante->cerrarCargoHabitacion($idComprobante, $idCargoHabitacion);   
    return $resultado;
  }

  function cerrarFactura($idComprobante, $idFactura)
  {
    $repoComprobante = new RepoComprobante();    
    $result = $repoComprobante->cerrarFactura($idComprobante, $idFactura);
    return $result;
  }

  /**
   * @todo metodo aDTO 
   */
}

?>
